home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / kcl.lha / ild / t.c < prev   
C/C++ Source or Header  |  1986-03-11  |  6KB  |  204 lines

  1. #include <stdio.h>
  2. #include <filehdr.h>
  3. #include <aouthdr.h>
  4. #include <ldfcn.h>
  5. #include <scnhdr.h>
  6. #include <syms.h>
  7. #include <reloc.h>
  8.  
  9. main(argc, argv)
  10. int argc;
  11. char *argv[];
  12. {
  13.     int i, j;
  14.     char *s;
  15.  
  16.     LDFILE *ldptr;
  17.     struct aouthdr unix_header;
  18.     SCNHDR secthead1;
  19.     SCNHDR secthead2;
  20.     SCNHDR secthead3;
  21.     SCNHDR secthead4;
  22.     SYMENT symbol;
  23.     struct reloc reloc;
  24.  
  25.     printf("sizeof(struct reloc) = %d\n\n", sizeof(struct reloc));
  26.     printf("sizeof(struct syment) = %d\n\n", sizeof(struct syment));
  27.  
  28.     ldptr = ldopen(argv[1], NULL);
  29.  
  30.     printf("f_magic:        %o\n", HEADER(ldptr).f_magic);
  31.     printf("f_nscns:    %d\n", HEADER(ldptr).f_nscns);
  32.     printf("f_timdat:    %d\n", HEADER(ldptr).f_timdat);
  33.     printf("f_symptr:    %d\n", HEADER(ldptr).f_symptr);
  34.     printf("f_nsyms:    %d\n", HEADER(ldptr).f_nsyms);
  35.     printf("f_opthdr:    %d\n", HEADER(ldptr).f_opthdr);
  36.     printf("f_flags:    %o\n", HEADER(ldptr).f_flags);
  37.  
  38.     if(HEADER(ldptr).f_opthdr == 0)
  39.         goto SSS;
  40.     FSEEK(ldptr, sizeof(struct filehdr), 0);
  41.     FREAD(&unix_header, sizeof(struct aouthdr), 1, ldptr);
  42.  
  43.     printf("\nmagic:        %o\n", unix_header.magic);
  44.     printf("vstamp:        %o\n", unix_header.vstamp);
  45.     printf("tsize:        %d\n", unix_header.tsize);
  46.     printf("dsize:        %d\n", unix_header.dsize);
  47.     printf("bsize:        %d\n", unix_header.bsize);
  48.     printf("entry:        %o\n", unix_header.entry);
  49.     printf("text_start:    %o\n", unix_header.text_start);
  50.     printf("data_start:    %o\n", unix_header.data_start);
  51.  
  52. SSS:
  53.     ldshread(ldptr, 1, §head1);
  54.  
  55.     printf("\nsecthead1:\n");
  56.     printf("s_name: %s\n", secthead1.s_name);
  57.     printf("s_paddr:    %o\n", secthead1.s_paddr);
  58.     printf("s_vaddr:    %o\n", secthead1.s_vaddr);
  59.     printf("s_size:        %d\n", secthead1.s_size);
  60.     printf("s_scnptr:    %o\n", secthead1.s_scnptr);
  61.     printf("s_relptr:    %o\n", secthead1.s_relptr);
  62.     printf("s_lnnoptr:    %o\n", secthead1.s_lnnoptr);
  63.     printf("s_nreloc:    %d\n", secthead1.s_nreloc);
  64.     printf("s_nlnno:    %d\n", secthead1.s_nlnno);
  65.     printf("s_flags:    %o\n", secthead1.s_flags);
  66.  
  67.     ldshread(ldptr, 2, §head2);
  68.  
  69.     printf("\nsecthead2:\n");
  70.     printf("s_name:    %s\n", secthead2.s_name);
  71.     printf("s_paddr:    %o\n", secthead2.s_paddr);
  72.     printf("s_vaddr:    %o\n", secthead2.s_vaddr);
  73.     printf("s_size:        %d\n", secthead2.s_size);
  74.     printf("s_scnptr:    %o\n", secthead2.s_scnptr);
  75.     printf("s_relptr:    %o\n", secthead2.s_relptr);
  76.     printf("s_lnnoptr:    %o\n", secthead2.s_lnnoptr);
  77.     printf("s_nreloc:    %d\n", secthead2.s_nreloc);
  78.     printf("s_nlnno:    %d\n", secthead2.s_nlnno);
  79.     printf("s_flags:    %o\n", secthead2.s_flags);
  80.  
  81.     ldshread(ldptr, 3, §head3);
  82.  
  83.     printf("\nsecthead3:\n");
  84.     printf("s_name:    %s\n", secthead3.s_name);
  85.     printf("s_paddr:    %o\n", secthead3.s_paddr);
  86.     printf("s_vaddr:    %o\n", secthead3.s_vaddr);
  87.     printf("s_size:        %d\n", secthead3.s_size);
  88.     printf("s_scnptr:    %o\n", secthead3.s_scnptr);
  89.     printf("s_relptr:    %o\n", secthead3.s_relptr);
  90.     printf("s_lnnoptr:    %o\n", secthead3.s_lnnoptr);
  91.     printf("s_nreloc:    %d\n", secthead3.s_nreloc);
  92.     printf("s_nlnno:    %d\n", secthead3.s_nlnno);
  93.     printf("s_flags:    %o\n", secthead3.s_flags);
  94.  
  95.     ldshread(ldptr, 4, §head4);
  96.  
  97.     printf("\nsecthead4:\n");
  98.     printf("s_name:    %s\n", secthead4.s_name);
  99.     printf("s_paddr:    %o\n", secthead4.s_paddr);
  100.     printf("s_vaddr:    %o\n", secthead4.s_vaddr);
  101.     printf("s_size:        %d\n", secthead4.s_size);
  102.     printf("s_scnptr:    %o\n", secthead4.s_scnptr);
  103.     printf("s_relptr:    %o\n", secthead4.s_relptr);
  104.     printf("s_lnnoptr:    %o\n", secthead4.s_lnnoptr);
  105.     printf("s_nreloc:    %d\n", secthead4.s_nreloc);
  106.     printf("s_nlnno:    %d\n", secthead4.s_nlnno);
  107.     printf("s_flags:    %o\n", secthead4.s_flags);
  108.  
  109.     printf("\nreloc info for 1:\n");
  110.     ldrseek(ldptr, 1);
  111.     for (i = 0; i < secthead1.s_nreloc; i++)    {
  112.         j = fread(&reloc, 10, 1, IOPTR(ldptr));
  113.         if (j != 1)
  114.             fprintf(stderr, "READ ERROR\n");
  115.         printf("\nr_vaddr        %o\n", reloc.r_vaddr);
  116.         printf("r_symndx    %d\n", reloc.r_symndx);
  117.         switch (reloc.r_type)    {
  118.         case R_ABS:
  119.             printf("r_type        R_ABS\n");
  120.             break;
  121.         case R_DIR32:
  122.             printf("r_type        R_DIR32\n");
  123.             break;
  124.         case R_OFF16:
  125.             printf("r_type        R_OFF16\n");
  126.             break;
  127.         case R_DIR32S:
  128.             printf("r_type        R_DIR32S\n");
  129.             break;
  130.         case R_REL24:
  131.             printf("r_type        R_REL24\n");
  132.             break;
  133.         case R_OPT16:
  134.             printf("r_type        R_OPT16\n");
  135.             break;
  136.         case R_IND24:
  137.             printf("r_type        R_IND24\n");
  138.             break;
  139.         case R_IND32:
  140.             printf("r_type        R_IND32\n");
  141.             break;
  142.         default:
  143.             fprintf(stderr, "Illegal r_type:    %o\n",
  144.                 reloc.r_type);
  145.             break;
  146.         }
  147.     }
  148.  
  149.     printf("\nreloc info for 2:\n");
  150.     ldrseek(ldptr, 2);
  151.     for (i = 0; i < secthead2.s_nreloc; i++)    {
  152.         fread(&reloc, sizeof(struct reloc), 1, IOPTR(ldptr));
  153.         printf("\nr_vaddr        %o\n", reloc.r_vaddr);
  154.         printf("r_symndx    %d\n", reloc.r_symndx);
  155.         switch (reloc.r_type)    {
  156.         case R_RELBYTE:
  157.             printf("r_type        R_RELTYPE\n");
  158.             break;
  159.         case R_RELWORD:
  160.             printf("r_type        R_RELWORD\n");
  161.             break;
  162.         case R_RELLONG:
  163.             printf("r_type        R_RELLONG\n");
  164.             break;
  165.         default:
  166.             fprintf(stderr, "Illegal r_type:    %d",
  167.                 reloc.r_type);
  168.             break;
  169.         }
  170.     }
  171.  
  172.     printf("\nsymbols:\n");
  173.     for (i = 0; i < HEADER(ldptr).f_nsyms; i++)    {
  174.         ldtbread(ldptr, i, &symbol);
  175.         printf("\nldgetname(%d):    %s\n",
  176.             i, ldgetname(ldptr, &symbol));
  177.         printf("n_value:    %o\n", symbol.n_value);
  178.         switch (symbol.n_scnum)    {
  179.         case N_UNDEF:
  180.             printf("n_scnum:    N_UNDEF\n");
  181.             break;
  182.         case N_ABS:
  183.             printf("n_scnum:    N_ABS\n");
  184.             break;
  185.         case N_DEBUG:
  186.             printf("n_scnum:    N_DEBUG\n");
  187.             break;
  188.         case N_TV:
  189.             printf("n_scnum:    N_TV\n");
  190.             break;
  191.         case P_TV:
  192.             printf("n_scnum:    P_TV\n");
  193.             break;
  194.         default:
  195.             printf("n_scnum:    %d\n", symbol.n_scnum);
  196.             break;
  197.         }
  198.         printf("n_type:        %d\n", symbol.n_type);
  199.         printf("n_scalss:    %d\n", symbol.n_sclass);
  200.         printf("n_numaux:    %d\n", symbol.n_numaux);
  201.         i += symbol.n_numaux;
  202.     }
  203. }
  204.